/**
 * DATE：2025/10/14
 * AUTHOR：QI
 * DESCRIPTION：用于描述模块的元数据，
 */
package empty.dsa.util
import EleTypeFun.getEleCfgW
import scala.collection.mutable.Map

class ModuleInfo(
    type_ : String,                               // 模块类型
    name : String,                                // 模块名称
    modulelist : List[ModuleInfo],                // 子模块列表
    moduleInsts : List[Int],                      // 子模块实例数量   
    elementLists : Map[Int, List[List[Int]]],     // 元素列表
    inPortList : List[String],                    // 输入端口列表
    outPortList : List[String],                   // 输出端口列表
    connect : List[Tuple2[List[Int],List[List[Int]]]],  // 连接列表
    width : Int )                                 // 宽度是什么意思
{
    def getType() : String = {
        type_
    }
    def getName() : String = {
        name
    }
    def getModuleList() : List[ModuleInfo] = {
        modulelist
    }
    def getModuleInsts() : List[Int] = {
        moduleInsts
    }
    def getElementLists() : Map[Int, List[List[Int]]] = {
        elementLists
    }
    def getInPortList() : List[String] = {
        inPortList
    }
    def getOutPortList() : List[String] = {
        outPortList
    }
    def getConnect() : List[Tuple2[List[Int],List[List[Int]]]] = {
        connect
    }
    def getWidth() : Int = {
        width
    }
    /**
     * 获取配置参数列表，理解这个函数需要理解dsaParam，因为i和dsaParam中的顺序有关系
     * @return
     */
    def getCfgList() : Map[Int, List[Int]] = {
        val cfglist : Map[Int, List[Int]] = Map()
        elementLists.map {
            case (eleType, elelist) => {
                cfglist += (eleType -> elelist.map(i => getEleCfgW(eleType,i)))  // 使用 ‘+=’ 需要导入 Map包
            }
        }
        cfglist
    }
    def getCfgW() : Int = {
        val cfglist = this.getCfgList()
        (cfglist.map {
            case (type_, elelist) => elelist.foldLeft(0)((b,a) => b + a)
        }).foldLeft(0)((b,a) => b + a)
    }
}
